import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Test {
    /**
     * 1、 记录最多8条错误记录，循环记录，最后只用输出最后出现的八条错误记录。对相同的错误记录只记录一条，但是错误计数增加。最后一个斜杠后面的带后缀名
     * 的部分（保留最后16位）和行号完全匹配的记录才做算是“相同”的错误记录。
     * 2、 超过16个字符的文件名称，只记录文件的最后有效16个字符；
     * 3、 输入的文件可能带路径，记录文件名称不能带路径。也就是说，哪怕不同路径下的文件，如果它们的名字的后16个字符相同，也被视为相同的错误记录
     * 4、循环记录时，只以第一次出现的顺序为准，后面重复的不会更新它的出现时间，仍以第一次为准
     * 输入:E:\V1R2\product\fpgadrive.c 1325
     * 输出:fpgadrive.c 1325 1
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        HashMap<String, String> map = new HashMap<>();
        ArrayList<String> arr = new ArrayList<>();

        //循环输入
        while(scanner.hasNext()){
            //输入文件名
            String str = scanner.next();
            //输入行号
            String num = scanner.next();
            //先将\进行分割
            String[] s = str.split("\\\\");
            //判断最后一个反斜杠之后的长度是否大于16
            str = s[s.length-1];
            if(str.length() > 16){
                str = str.substring(str.length() - 16);
            }
            //加上行号
            str = str + " " + num;
            if(!map.containsKey(str)){
                arr.add(str);
                map.put(str, "1");
            }else{
                map.put(str, map.get(num) + 1);
            }
            //打印
            int start = 0;
            if(arr.size() > 8){
                start = arr.size() - 8;
            }
            for (int i = start; i < arr.size(); i++) {
                System.out.print(arr.get(start) + " " + map.get(arr.get(start)));
            }
        }
    }
}
